import { createApp } from 'vue'
import App from './App.vue'
import store from '@/library/store'
import router from '@/library/router'

import { setupAntd } from '@/library/antd'
import { setupI18n } from '@/library/i18n'
/*=============================================================*/
// console.info('APP RUNING MODE:' + import.meta.env.MODE)
// console.info('APP RUNING URL:'  + import.meta.env.BASE_URL)
// console.info('APP RUNING DEV:'  + import.meta.env.DEV)
// console.info('APP RUNING SSR:'  + import.meta.env.SSR)
// console.log('VITE_SOME_KEY:'    + import.meta.env.VITE_SOME_KEY)
/*=============================================================*/
// 创建主程序
const app = createApp(App)
// 装载组件
setupI18n(app)
setupAntd(app)

// 绑定全局属性，
//app.config.globalProperties.$tt = upser()
//app.config.globalProperties.$http = () => {}
//获取的全局属性
//方法一：
// getCurrentInstance().appContext.config.globalProperties.$tt
//方法二：
// const { proxy }: any = getCurrentInstance();
// proxy.$tt
//方法三：
//const { $tt } = getCurrentInstance().appContext.config.globalProperties

// app.config.isCustomElement = tag => tag.startsWith('app-')
// app.use(/* ... */)
// app.mixin(/* ... */)
// app.component(/* ... */)
// app.directive(/* ... */)

app.use(store)
    .use(router)
    .mount('#app')
app.config.performance = true

/****
 * 参数err：错误内容，
 * vm：对应的实例，
 * info：Vue特定的错误信息，如某个生命周期中出现的错误
 */
app.config.errorHandle = (err, vm, info) => {
    console.info(err, vm, info)
}

/****
 * msg: 警告信息
 * vm: 组件实例
 * trace: 是组件的继承关系追踪
 *
 * 注意：仅在开发环境有效，生产环境中将被忽略。
 */
app.config.warnHandle = (msg, vm, trace) => {
    console.info(msg, vm, trace)
}

/**
// 获取当前组件的上下文，下面两种方式都能获取到组件的上下文。
const { ctx }  = getCurrentInstance();  //  方式一，这种方式只能在开发环境下使用，生产环境下的ctx将访问不到
const { proxy }  = getCurrentInstance();  //  方式二，此方法在开发环境以及生产环境下都能放到组件上下文对象（推荐）
// ctx 中包含了组件中由ref和reactive创建的响应式数据对象,以及以下对象及方法;
proxy.$attrs
proxy.$data
proxy.$el
proxy.$emit
proxy.$forceUpdate
proxy.$nextTick
proxy.$options
proxy.$parent
proxy.$props
proxy.$refs
proxy.$root
proxy.$router
proxy.$slots
proxy.$watch
 */